From: kfraser@localhost.localdomain Date: Mon, 9 Oct 2006 12:50:00 +0000 (+0100) Subject: [XEND] No need to decompress the initrd when building a domain. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~15615^2~27 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=5000a6a1e0b9c42c17345817e589e61175bad3d0;p=xen.git [XEND] No need to decompress the initrd when building a domain. The guest OS should be capable of parsing an image file in whatever format was produced by that OS's tools. Furthermore, we have seen initrd images with trailing garbage. This causes us to calculate the wrong size for the uncompressed data and hence fail to build the guest. Signed-off-by: Keir Fraser --- diff --git a/tools/libxc/xc_linux_build.c b/tools/libxc/xc_linux_build.c index 98c84da3b2..594aed0aaf 100644 --- a/tools/libxc/xc_linux_build.c +++ b/tools/libxc/xc_linux_build.c @@ -38,7 +38,7 @@ struct initrd_info { enum { INITRD_none, INITRD_file, INITRD_mem } type; unsigned long len; union { - gzFile file_handle; + int fd; char *mem_addr; } u; }; @@ -152,7 +152,7 @@ int load_initrd(int xc_handle, domid_t dom, } else { - if ( gzread(initrd->u.file_handle, page, PAGE_SIZE) == -1 ) + if ( read(initrd->u.fd, page, PAGE_SIZE) == -1 ) { PERROR("Error reading initrd image, could not"); return -EINVAL; @@ -1344,20 +1344,16 @@ int xc_linux_build(int xc_handle, if ( (initrd_name != NULL) && (strlen(initrd_name) != 0) ) { - initrd_info.type = INITRD_file; - if ( (fd = open(initrd_name, O_RDONLY)) < 0 ) { PERROR("Could not open the initial ramdisk image"); goto error_out; } - initrd_info.len = xc_get_filesz(fd); - if ( (initrd_info.u.file_handle = gzdopen(fd, "rb")) == NULL ) - { - PERROR("Could not allocate decompression state for initrd"); - goto error_out; - } + initrd_info.type = INITRD_file; + initrd_info.u.fd = fd; + initrd_info.len = lseek(fd, 0, SEEK_END); + lseek(fd, 0, SEEK_SET); } sts = xc_linux_build_internal(xc_handle, domid, image, image_size, @@ -1367,8 +1363,8 @@ int xc_linux_build(int xc_handle, error_out: free(image); - if ( initrd_info.type == INITRD_file && initrd_info.u.file_handle ) - gzclose(initrd_info.u.file_handle); + if ( initrd_info.type == INITRD_file ) + close(initrd_info.u.fd); else if ( fd >= 0 ) close(fd);